home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 355_02 / slk2.exe / SPP / STR.C < prev    next >
C/C++ Source or Header  |  1991-06-09  |  3KB  |  206 lines

  1. /*
  2.     New Sherlock Preprocessor -- string handling routines.
  3.  
  4.     source: str.c
  5.     started: October 6, 1985
  6.     version: May 26, 1988
  7.  
  8.  
  9.     PUBLIC DOMAIN SOFTWARE
  10.  
  11.     Sherlock, including the SPP, SDEL and SDIF programs, was placed in
  12.     the public domain on June 15, 1991, by its author,
  13.  
  14.         Edward K. Ream
  15.         166 North Prospect Ave.
  16.         Madison, WI 53705.
  17.         (608) 257-0802
  18.  
  19.     Sherlock may be used for any commercial or non-commercial purpose.
  20.  
  21.  
  22.     DISCLAIMER OF WARRANTIES
  23.  
  24.     Edward K. Ream (Ream) specifically disclaims all warranties,
  25.     expressed or implied, with respect to this computer software,
  26.     including but not limited to implied warranties of merchantability
  27.     and fitness for a particular purpose.  In no event shall Ream be
  28.     liable for any loss of profit or any commercial damage, including
  29.     but not limited to special, incidental consequential or other damages.
  30. */
  31.  
  32. #include "spp.h"
  33.  
  34. /*
  35.     Allocate memory big enough to hold the string,
  36.     then copy the string to the allocated memory.
  37. */
  38. char *
  39. str_alloc(s)
  40. register char *s;
  41. {
  42.     register char * p;
  43.     register int n;
  44.  
  45.     ENTER_TRACE("str_alloc", printf("(%s)\n", pr_str(s)));
  46.  
  47.     n = str_len(s) + 1;
  48.     p = m_alloc(n);
  49.     str_cpy(p, s);
  50.  
  51.     RETURN_PTR("str_alloc", p);
  52. }
  53.  
  54. /*
  55.     Concatenate s2 to the end of s1.
  56. */
  57.  
  58. void
  59. str_cat(s1, s2)
  60. register char *s1;
  61. register char *s2;
  62. {
  63.     TRACEP("str_cat", printf("(%lx, %s)\n", s1, s2));
  64.  
  65.     while(*s1++) {
  66.         ;
  67.     }
  68.     s1--;
  69.     while(*s2) {
  70.         *s1++ = *s2++;
  71.     }
  72.     *s1 = '\0';
  73. }
  74.  
  75. /*
  76.     Allocate global memory for two strings
  77.     This is NOT the same as strcat()!!
  78. */
  79. char *
  80. str_mcat(s1, s2)
  81. register char *s1;
  82. register char *s2;
  83. {
  84.     register char * p;
  85.     register int n1, n2;
  86.  
  87.     TRACEP("str_mcat", printf("(%s, %s)\n", s1, s2));
  88.  
  89.     n1 = str_len(s1);
  90.     n2 = str_len(s2);
  91.     p = m_alloc(n1 + n2 + 1);
  92.     str_cpy(p, s1);
  93.     str_cpy(p + n1, s2);
  94.  
  95.     TRACEPN("str_mcat", printf("returns <%s>\n", p));
  96.     return p;
  97. }
  98.  
  99. /*
  100.     Compare s1 and s2.
  101.     Return <0  ==0  >0
  102. */
  103.  
  104. int
  105. str_cmp(s1, s2)
  106. register char *s1;
  107. register char *s2;
  108. {
  109.     TRACEP("str_cmp", printf("(%s, %s)\n", s1, s2));
  110.  
  111.     while (*s1 == *s2) {
  112.         if (*s1 == '\0') {
  113.             return 0;
  114.         }
  115.         else {
  116.             s1++;
  117.             s2++;
  118.         }
  119.     }
  120.     return ((int)*s1) - ((int)*s2);
  121. }
  122.  
  123. /*
  124.     Copy s2 to s1.
  125.     s1 must be large enough to hold s2.
  126. */
  127. void
  128. str_cpy(s1, s2)
  129. register char *s1;
  130. register char *s2;
  131. {
  132.     TRACEP("str_cpy", printf("(%lx, %s)\n", s1, s2));
  133.  
  134.     while (*s2) {
  135.         *s1++ = *s2++;
  136.     }
  137.     *s1 = '\0';
  138. }
  139.  
  140. /*
  141.     Return TRUE if s1 == s2
  142. */
  143. bool
  144. str_eq(s1, s2)
  145. register char *s1;
  146. register char *s2;
  147. {
  148.     TRACEP("str_eq", printf("(%s, %s)\n", s1, s2));
  149.  
  150.     while(*s1) {
  151.         if (*s1++ != *s2++) {
  152.             TRACEP("str_eq", printf("returns FALSE\n"));
  153.             return FALSE;
  154.         }
  155.     }
  156.     TRACEPN("str_eq",
  157.         printf("returns %s\n", (!*s2) ? "TRUE" : "FALSE"));
  158.     return !*s2;
  159. }
  160.  
  161. /*
  162.     Return the length of a string.
  163. */
  164. int
  165. str_len(s)
  166. register char *s;
  167. {
  168.     register int len;
  169.  
  170.     TRACEP("str_len", printf("(%s)\n", s));
  171.  
  172.     len=0;
  173.     while (*s++) {
  174.         len++;
  175.     }
  176.  
  177.     TRACEPN("str_len", printf("returns %d\n", len));
  178.     return len;
  179. }
  180.  
  181. /*
  182.     Convert a string to lower case.
  183. */
  184. void
  185. str_lower(s)
  186. register char *s;
  187. {
  188.     while (*s) {
  189.         *s = tolower(*s);
  190.         s++;
  191.     }
  192. }
  193.  
  194. /*
  195.     Convert a string to upper case.
  196. */
  197. void
  198. str_upper(s)
  199. register char *s;
  200. {
  201.     while (*s) {
  202.         *s = toupper(*s);
  203.         s++;
  204.     }
  205. }
  206.